package colorEditor.util {
	/**
	 * @author Martin Heidegger mh@leichtgewicht.at
	 */
	public function labFromRGB( r: Number, g: Number, b: Number ): LAB {
		
		r = ( r > 0.04045 )
			? Math.pow( ( ( r + 0.055 ) / 1.055), 2.4 ) * 100.0
			: r * 7.739938080495356; // == r1 * 100 / 12.92;
		;
		g = ( g > 0.04045 )
			? Math.pow( ( ( g + 0.055 ) / 1.055), 2.4 ) * 100.0
			: g * 7.739938080495356; // == g1 * 100 / 12.92;
		;
		b = ( b > 0.04045 )
			? Math.pow( ( ( b + 0.055 ) / 1.055), 2.4 ) * 100.0
			: b * 7.739938080495356; // == b1 * 100 / 12.92;
		;
		
		var x: Number = ( r * 0.4124 + g * 0.3576 + b * 0.1805 ) * 0.0105211106;
		var y: Number = ( r * 0.2126 + g * 0.7152 + b * 0.0722 ) * 0.01;
		var z: Number = ( r * 0.0193 + g * 0.1192 + b * 0.9505 ) * 0.00918417016;
		
		x = (x > 0.008856) ? Math.pow( x, 0.3333333 ) : (7.787 * x) + 0.137931034;
		y = (y > 0.008856) ? Math.pow( y, 0.3333333 ) : (7.787 * y) + 0.137931034;
		z = (z > 0.008856) ? Math.pow( z, 0.3333333 ) : (7.787 * z) + 0.137931034;
		
		return new LAB(
			( ( y > 0.008856 ) ? (116 * y) - 16 : 903.3 * y),
			500 * (x - y),
			200 * (y - z)
		);
	}
}
